#include "Comm.hpp"
#include  "Fifo.hpp"
#include <unistd.h>

int main() {
    // 获取用于共享内存通信的键值
    key_t key = GetKey();
    cout << "key:" << ToHex(key) << endl;

    // 根据键值获取共享内存标识符
    int shmid = GetShm(key, default_size);
    cout << "shmid:" << ToHex(shmid) << endl;

    // 将共享内存附加到当前进程的地址空间
    char *shmaddr = (char*)ShmAttach(shmid);
    cout << "shmaddr:" << ToHex((uint64_t)shmaddr) << endl;

    // 清零共享内存区域的内容
    memset(shmaddr, 0, default_size);
    // 初始化同步对象，用于控制对共享内存的访问
    Sync syn;
    syn.OpenWriteOrDie();
    
    // 通信开始
    // pipe, fifo, ->read/write->系统调用， shm -> 没有使用系统调用！！
    for (char ch = 'A'; ch <= 'Z'; ch++) {
        shmaddr[ch - 'A'] = ch;
        sleep(1);
        syn.Wakeup();
    }

    // 从当前进程的地址空间中分离共享内存
    ShmDetach(shmaddr);
    cout << "shmaddr:" << ToHex((uint64_t)shmaddr) << endl;
    sleep(5);

    return 0;
}
